package model.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import model.vo.movie.CountryVO;
import model.vo.movie.GenreVO;
import model.vo.movie.MovieGradeInfo;
import model.vo.movie.MovieVO;
import model.vo.movie.StaticsVO;
import model.vo.reservation.ScreeningMovieVO;
import model.vo.theater.LocalInfoVO;
import model.vo.theater.PlayRoomTypeVO;
import model.vo.theater.PlayRoomVO;
import model.vo.theater.TheaterVO;

import com.ibatis.sqlmap.client.SqlMapClient;

public class AdminDao {
	
	public AdminDao() {
		super();
		// TODO Auto-generated constructor stub
	}

	private SqlMapClient sqlMapClient;

	public void setSqlMapClient(SqlMapClient sqlMapClient) {
		this.sqlMapClient = sqlMapClient;
	}

	public ArrayList<GenreVO> getGenreInfo() throws SQLException {
		return (ArrayList<GenreVO>) sqlMapClient.queryForList("admin.getGnereInfo");
	}

	public ArrayList<CountryVO> getCountryInfo() throws SQLException {
		return (ArrayList<CountryVO>)sqlMapClient.queryForList("admin.getCountryInfo");
	}

	public ArrayList<LocalInfoVO> getLocalInfo() throws SQLException {
		return (ArrayList<LocalInfoVO>)sqlMapClient.queryForList("admin.getLocalInfo");
	}

	public ArrayList<MovieGradeInfo> getGradeInfo() throws SQLException {
		return (ArrayList<MovieGradeInfo>)sqlMapClient.queryForList("admin.getGradeInfo");
	}

	public int registerMovie(MovieVO movieVO) throws SQLException {
		return (Integer)sqlMapClient.insert("admin.registerMovie",movieVO);		
	}

	public ArrayList<TheaterVO> getTheaterInfo() throws SQLException {
		return (ArrayList<TheaterVO>) sqlMapClient.queryForList("admin.getTheaterInfo");
	}

	public ArrayList<MovieVO> getMovieInfo() throws SQLException {
		return (ArrayList<MovieVO>)sqlMapClient.queryForList("admin.getMovieInfo");
	}

	public void registerScreeningMovie(ScreeningMovieVO movieVO) throws SQLException {
		sqlMapClient.insert("admin.registerScreeningMovie",movieVO);		
	}
	public ArrayList<HashMap> getScreeningMovieList() throws SQLException {
		return (ArrayList<HashMap>)sqlMapClient.queryForList("admin.getScreeningMovieList");
	}
	public ArrayList<HashMap> getPublicDayByMovieNo(int movie_no) throws SQLException {
		return (ArrayList<HashMap>) sqlMapClient.queryForList("admin.getPublicDayByMovieNo",movie_no);
	}
	public void regScreeningMovie(ScreeningMovieVO movieVO) throws SQLException {
		sqlMapClient.insert("admin.regScreeningMovie",movieVO);		
	}
	/** 
	 * 상영표에 등록 가능한 영화 목록들을 가져온다.
	 */
	public ArrayList<Map> getRegisterPossibleMovie() throws SQLException {
		return (ArrayList<Map>) sqlMapClient.queryForList("admin.getRegisterPossibleMovie");
	}
	/** 
	 * 상영표에 등록 가능한 지역 목록들을 가져온다.
	 */
	public ArrayList<Map> getRegisterPossibleLocal() throws SQLException {
		return (ArrayList<Map>) sqlMapClient.queryForList("admin.getRegisterPossibleLocal");
	}
	/** 
	 * 상영표에 등록 가능한 영화관 목록들을 가져온다.
	 */
	public ArrayList<Map> getRegisterPossibleTheater() throws SQLException {
		return (ArrayList<Map>) sqlMapClient.queryForList("admin.getRegisterPossibleTheater");
	}
	/** 
	 * 상영표 등록시 영화선택에 따른 지역 정보를 가져온다.
	 */
	public ArrayList<Map> getLocalAsMovieNo(String movie_no) throws SQLException {
		return (ArrayList<Map>) sqlMapClient.queryForList("admin.getLocalAsMovieNo",movie_no);
	}
	/** 
	 * 상영표 등록시 영화,지역 선택에 따른 영화관 정보를 가져온다.
	 */
	public ArrayList<Map> getTheaterAsLocalNoAndMovleNo(Map map) throws SQLException {
		return (ArrayList<Map>) sqlMapClient.queryForList("admin.getTheaterAsLocalNoAndMovleNo",map);
	}
	/** 
	 * 상영표 등록시 영화관 선택에 따른 상영관 정보를 가져온다.
	 */
	public ArrayList<Map> getPlayRoomAsTheaterNo(String theater_no) throws SQLException {
		return (ArrayList<Map>) sqlMapClient.queryForList("admin.getPlayRoomAsTheaterNo",theater_no);
	}
	/** 
	 * 상영표 등록시 해당 영화의 상영기간을 가져온다.
	 */
	public HashMap getPossibleDateAsMovieNo(Map map) throws SQLException {
		return (HashMap) sqlMapClient.queryForObject("admin.getPossibleDateAsMovieNo",map);
	}
	/** 
	 * 상영표 등록시 해당 영화의 러닝타임을 가져온다.
	 */
	public int getRunninTimeAsMovieNo(String movie_no) throws SQLException {
		return (int) sqlMapClient.queryForObject("admin.getRunninTimeAsMovieNo",movie_no);
	}
	//영화관 등록 메서드 :신일
	public void registerTheater(TheaterVO theaterVO) throws SQLException {
		int id=(Integer)sqlMapClient.insert("admin.registerTheater",theaterVO);
		theaterVO.setTheater_no(id);
	}
	
	//상영관 등록 메서드 :신일
	public void registerPlayRoom(PlayRoomVO playRoomVO) throws SQLException {
		int id=(Integer)sqlMapClient.insert("admin.registerPlayRoom",playRoomVO);
		playRoomVO.setPlay_room_uniq_no(id);
	}

	//인자값 TheaterVO 로 TheaterVO 를 로딩하는 메서드 :신일
	public TheaterVO getTheaterVObyTNo(TheaterVO theaterVO) throws SQLException {
		return (TheaterVO) sqlMapClient.queryForObject("admin.getTheaterVObyTNo",theaterVO);
	}
	//인자값 TheaterVO 로 영화관 정보를 수정 :신일
	public void modifyTheaterVObyTheaterVO(TheaterVO theaterVO) throws SQLException {
		sqlMapClient.update("admin.modifyTheaterVObyTheaterVO",theaterVO);
	}
	//인자값 theater_no 로 해당되는 상영관 리스트를 로딩 :신일
	public ArrayList<PlayRoomVO> getPlayRoomVObyTNO(int tno) throws SQLException{
		return (ArrayList<PlayRoomVO>) sqlMapClient.queryForList("admin.getPlayRoomVObyTNO",tno);
	}
	//인자값 int playRoomNo 상영관 삭제 : 참조키가 물려있는 경우 sql exception 발생 :신일
	public void delPlayRoom(int playRoomNo) throws SQLException {
		sqlMapClient.delete("admin.delPlayRoom",playRoomNo);
	}
	//playRoomNo 로딩 : 상영관 삭제후 결과 값 (상영관 번호) 를 반환 :신일
	public int getPlayRoomNoByPlayRoomUniqNo(int playRoomNo) throws SQLException{
		return (Integer) sqlMapClient.queryForObject("admin.getPlayRoomNoByPlayRoomUniqNo",playRoomNo);
	}
	//playRoomTypeVo 를 리스트로 로딩 : 상영관 등록 및 수정 시 입력 가능한 상영관 타입을 로딩 :신일	
	public ArrayList<PlayRoomTypeVO> getPlayRoomTypeVO() throws SQLException{
		return (ArrayList<PlayRoomTypeVO>) sqlMapClient.queryForList("admin.getPlayRoomTypeVO");
	}
	
	/** 
	 * 상영표 등록시 영화관, 상영관 번호로 상영관의uniqNo를 가져온다.
	 */
	public String getPlayRoomUniqNoAsTheaterNoAndPlayRoomNo(Map map) throws SQLException {
		return  (String) sqlMapClient.queryForObject("admin.getPlayRoomUniqNoAsTheaterNoAndPlayRoomNo",map); 
	}
	/** 
	 * 상영표 등록
	 */
	public void timeTableRegister(HashMap map) throws SQLException {
		sqlMapClient.insert("admin.timeTableRegister",map);
	}
	/** 
	 * 상영표 등록시 현재 등록되어 있는 목록을 가져옴 (paging)
	 */
	public ArrayList<Map> getTimeTable(String pageNo) throws SQLException {
		return (ArrayList<Map>) sqlMapClient.queryForList("admin.getTimeTable",pageNo);
	}
	/** 
	 * 상영표 목록 페이징을 위해서 총 갯수를 가져옴
	 */
	public int getTotalTimeTable() throws SQLException {
		return (Integer)sqlMapClient.queryForObject("admin.getTotalTimeTable");
	}
	/** 
	 * 상영표 등록시 영화 선택에 따라서 해당 영화의 상영표 등록현황을 가져옴
	 */
	public ArrayList<HashMap> getTimeTableAsMovieNo(String movie_no) throws SQLException {
		return (ArrayList<HashMap>) sqlMapClient.queryForList("admin.getTimeTableAsMovieNo",movie_no);
	}
	/** 
	 * 상영표 등록시 영화,지역 선택에 따라서 해당 영화의 상영표 등록현황을 가져옴
	 */
	public ArrayList<HashMap> getTimeTableAsMovieNoAndLocalNo(Map map) throws SQLException {
		return (ArrayList<HashMap>) sqlMapClient.queryForList("admin.getTimeTableAsMovieNoAndLocalNo",map);
	}
	/** 
	 * 상영표 등록시 영화,지역,영화관 선택에 따라서 해당 영화의 상영표 등록현황을 가져옴
	 */
	public ArrayList<HashMap> getTimeTableAsMovieNoAndLocalNoAndTheaterNo(HashMap queryMap) throws SQLException {
		return (ArrayList<HashMap>) sqlMapClient.queryForList("admin.getTimeTableAsMovieNoAndLocalNoAndTheaterNo",queryMap);
	}
	/** 
	 * 상영표 등록시 영화,지역,영화관,상영관 선택에 따라서 해당 영화의 상영표 등록현황을 가져옴
	 */
	public ArrayList<HashMap> getTimeTableAsAllNo(HashMap map) throws SQLException {
		return (ArrayList<HashMap>) sqlMapClient.queryForList("admin.getTimeTableAsAllNo",map);
	}
	/** 
	 * 상영표 삭제시 time_table_no 로 해당 게시물 삭제
	 */
	public void delTimeTable(String str) throws SQLException {
		sqlMapClient.delete("admin.delTimeTable",str);
	}
	/** 
	 * 상영표 삭제시 등록되어 있는 모든 time_table_no 를 가져옴
	 */
	public ArrayList<String> getAllTimeTableNo() throws SQLException {
		return (ArrayList<String>) sqlMapClient.queryForList("admin.getAllTimeTableNo");
	}
	/**
	 * 5/8 아영추가사항
	 * @param movie_no
	 * @throws SQLException 
	 */
	public void regMovieToStatics(MovieVO vo) throws SQLException {
		sqlMapClient.insert("admin.regMovieToStatics", vo);		
		sqlMapClient.insert("admin.regMovieToStaticsWoman",vo);
	}
	/**
	 * 영화정보 수정
	 * @throws SQLException 
	 */
	public void modifyMovie(MovieVO movieVO) throws SQLException {
		sqlMapClient.update("admin.modifyMovie",movieVO);
		
	}
	/**
	 * 박스 오피스 업데이트 5/9 아영
	 */
	public void updateBoxOffice(StaticsVO statics) throws SQLException {
		sqlMapClient.update("admin.updateBoxOffice",statics);
	}
	/**
	  * 철희
	  * 통계에서 박스오피스 업데이트시 최근1주일 제외하고 reservation 모두삭제
	  */
	 public void deleteReservationWeek() throws SQLException{
	  sqlMapClient.delete("admin.deleteReservationWeek");
	 }
	 /**
	  * 철희
	  * 통계에서 박스오피스 업데이트시 최근1주일 제외하고 time_table 모두삭제
	  */
	 public void deleteTimeTableWeek() throws SQLException{
	  sqlMapClient.delete("admin.deleteTimeTableWeek");
	 }
	 /**
	  * 누적관객수 불러오기
	 * @throws SQLException 
	  */
	public int getBoxOfficeCount(StaticsVO statics) throws SQLException {
		return (int) sqlMapClient.queryForObject("admin.getBoxOfficeCount",statics);
	}

	public void screeningMovieDel(Map map) throws SQLException {
		sqlMapClient.delete("admin.screeningMovieDel",map);
		
	}

	public String todayCheck() throws SQLException {
		return (String) sqlMapClient.queryForObject("admin.todayCheck");
	}

}
